package com.cskaoyan.javase.oop1._2reference;
/**
 * 重新认识引用数据类型
 * 我们通过数组的初始化对引用数据类型有了基本的认识:
 *      引用数据类型在内存中分为两个部分: 在栈上创建引用,在堆上创建对象
 *      对象是引用数据类型实质,用于存储信息,但是我们只能通过引用间接去访问对象
 * 但是这么认识引用数据类型,它和基本数据类型之间的相似性很少,
 * 甚至有点对立,这就不合适,我们需要一种新的认识来统一它们的概念.
 *
 * 我们通过数据类型的概念来统一它们
 * 数据类型: 基于一组数据的集合,和基于这组数据的合法操作.
 * 举例: int类型它的取值范围是有限的,整数.它只能做加减乘除等操作,不能做调用方法,求长度等操作
 * 接下来,做一下类比:
 * 数据的集合 --> 对象属性的集合 --> 成员变量的集合
 * 操作的集合 ---> 对象行为的集合 --> 成员方法的集合
 * 也就是说,引用数据类型仍然是 数据 + 操作
 * 就可以做以下总结：
 * 1. 一个类的定义，实际上就是定义了一种全新的数据类型，一种自定义的数据类型。
 * 2. 这种完全不同于基本数据类型的数据类型，我们称之为"引用数据类型"。
 *
 * 现在我们已经统一了它们的概念,引用数据类型和基本数据类型有了相似性,但是它们还是有很大区别
 * 基本数据类型变量是jvm内置数据类型,JVM已经"认识"它们了,它们开辟空间初始化,是可以直接完成的
 * 但是引用数据类型可不可以呢?
 *
 * 不可以,引用数据类型是自定义数据类型,jvm预先不知道该类型.所以JVM在创建引用数据类型对象时,需要先"认识,了解"该类型,知道它有什么成员变量,有什么成员方法等等.java中把"认识,了解"一个类型的过程,称之为"类加载".
 *
 * 关于类加载:
 *      1.类加载在后面有专门的章节去讲解,这里我们不详细讲解.
 *      2.类加载通过使用I/O流的方式,把一个类的二进制字节码文件读取进"方法区",然后通过一系列的操作,完成类加载,JVM就可以开始创建该类的对象了.
 *
 *      思考:
 *          1.创建对象和类加载是两个过程,它们有先后顺序吗?
 *              先进行类加载,才能创建对象
 *
 *          2.创建一个类的对象,new对象,请问会不会类加载该类?
 *              会,new对象触发该类类加载
 *
 * @since 15:44
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {

    }
}
